package com.itlaobing.reflection.constructor;

import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.time.LocalDate;

/**
 * 获取构造方法的 修饰符 、名称 、参数类型列表 、异常类型列表
 */
public class GetConstructor3 {

    public static void main(String[] args) throws Exception {

        Class<?> c = Class.forName("com.itlaobing.reflection.constructor.Tiger");

        System.out.println("- - - - - - - - - - - - - - - - - - - -");

        // 从c类的所有构造方法中(不考虑修饰符的影响)，根据 参数列表 获取指定的构造方法实例
        Constructor<?> constructor = c.getDeclaredConstructor( String.class , char.class , LocalDate.class );

        // 获得修饰符
        int mod = constructor.getModifiers() ;
        String modifiers = Modifier.toString( mod );
        System.out.println( modifiers + " : " + mod );


        System.out.println( "- - - - - - - - - - - - - - - - - - - -" );

        // 获得名称
        String name = constructor.getName();
        System.out.println(name);

        System.out.println( "- - - - - - - - - - - - - - - - - - - -" );

        int count = constructor.getParameterCount();
        System.out.println(count);

        System.out.println( "- - - - - - - - - - - - - - - - - - - -" );

        // 获得 参数类型列表
        Class<?>[] paramTypes = constructor.getParameterTypes();
        System.out.println(paramTypes.length);

        for (Class<?> paramType : paramTypes){
            System.out.println(paramType.getSimpleName());
        }

        System.out.println( "- - - - - - - - - - - - - - - - - - - -" );

        // 获得 异常名称
        Class<?>[] exTypes = constructor.getParameterTypes();
        System.out.println(exTypes.length);

        for (Class<?> exType : exTypes){
            System.out.println(exType.getSimpleName());
        }
    }
}
